-
Notifications
You must be signed in to change notification settings - Fork 461
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Nuevas funcionalidades para reforzar OA Promesas en Buger Queen #1158
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Me parece bien. Solo mi duda es si podemos sacar la dependencia de herokuapp
projects/04-burger-queen/README.md
Outdated
|
||
## 7. Funcionalidades para reforzar OA de promesas | ||
|
||
Te sugerimos implementar las siguientes funcionalidades para que puedas reforzar los objetivos de aprendizaje de promesas vistos en el proyecto de MD Links. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
necesitamos referir a MD Links? o podemos decir "Te sugerimos implementar las siguientes funcionalidades para que puedas reforzar los objetivos de aprendizaje de promesas, si aun no has creado promesas en otro proyecto" algo asi?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si, también siento que se puede omitir mencionar MD links
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si, es cierto podemos omitirlo
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Estoy de acuerdo en omitir a MD-Links! y me parece bien el texto que ofrece Ivy, pero quizás no lo dejaría solo para quienes no han hecho promesas en sus proyectos anteriores... quizás lo dejaría como "...trabajar y/o reforzar objetivos de aprendizaje de promesas", en caso de que alguien quiera seguir reforzando lo aprendido en MD-links pero no necesariamente quiera realizar el proyecto de Burger Queen API.
projects/04-burger-queen/README.md
Outdated
Te sugerimos implementar las siguientes funcionalidades para que puedas reforzar los objetivos de aprendizaje de promesas vistos en el proyecto de MD Links. | ||
|
||
* Agrega la opción de actualizar 2 o más pedidos que esten en la cocina. Muestra al usuario un **único** mensaje de confirmación cuando **todos** los pedidos hayan sido actualizados con éxito. Recuerda, firestore al [actualizar un documento](https://firebase.google.com/docs/firestore/manage-data/add-data#update-data) retorna una promesa. ¿Cómo podrías mostrar el mensaje de confirmación unicamente cuando todas las promesas se hayan resuelto? Te sugerimos revisar la función [Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all). | ||
* Cuando un pedido finalice se debe hacer una petición HTTP a la url [https://salty-escarpment-74924.herokuapp.com/](https://salty-escarpment-74924.herokuapp.com/) que responderá de forma aleatoria si el cliente tiene el 50% de descuento en su cuenta. Para esto deberás llamar la función _getDiscount_ mostrada a continuación. Termina la implementación de la función según los comentarios que hay en ella. Te sugerimos revisar la documentacion de [HTTP Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status), [fetch](https://developer.mozilla.org/en-US/docs/Web/API/fetch) y [creación de promesas](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
este herokuapp es algo que hemos escrito y podemos garantizar que siempre va a estar?
pensando que quiza podemos incluir un function que resuelva su Promesa con status 200 o 500 aleatoriamente, para no tienes que depender en otro servicio
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si yo escribi esta app. Es muy sencilla, de forma aleatoria devuelve 200 o 500. Lo ideal es transferirla a un perfil de laboratoria o que la estudiante la mocke, que opinan que sean mejor @unjust y @santiaguf ?
@santiaguf agrego entonces el parametro que sugeriste, gracias
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si quieres, la puedes transferir como repo de laboratoria, es decir, forkear desde tu perfil al de laboratoria, de tal suerte que quede algo como:
https://github.com/laboratoria/buger-queen-discount forked from https://github.com/ssinuco/buger-queen-discount
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agregaría una sugerencia de empezar realizando un diagrama de flujo, como para que tengan una idea más visual de como funcionaría esto.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si yo escribi esta app. Es muy sencilla, de forma aleatoria devuelve 200 o 500. Lo ideal es transferirla a un perfil de laboratoria o que la estudiante la mocke, que opinan que sean mejor @unjust y @santiaguf ?
@santiaguf agrego entonces el parametro que sugeriste, gracias
Prefiero ponerlo en un repo Laboratoria o archivo dentro del proyecto. El mock puede ser opcional, creo puede ser mucho para alguien que todavía falta promesas no se.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Estoy de acuerdo en que depender de una API externa mantenida por un coach puede ser problemático. ¿Qué les parecería sugerir que implementen un mock de este tipo?
const getDiscount = () => new Promise((resolve, reject) => {
setTimeout(() => {
const discount = parseInt(Math.random() * 100);
if (discount > 80) {
return reject(new Error(`${discount}% es demasiado descuento!`));
}
return resolve(discount);
}, 0);
});
projects/04-burger-queen/README.md
Outdated
return new Promise((resolve, reject) => { | ||
|
||
//1. Realiza una peticion HTTP a la URL https://salty-escarpment-74924.herokuapp.com/ | ||
//2. Si la peticion retorna codigo 200 entonces resuelve la promesa |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Acabo de ver que la API devuelve un código de status 500 cuando no hay descuento:
Un 500 debe devolverse cuando hay un error en el servidor, y este no es el caso, yo sugiero que cuando no haya descuento, devuelva 200 pero tenga un parámetro en el body de la respuesta:
{
"gotDiscount": false,
"msg": "Esta vez no tienes descuento. Inténtalo en tu próxima visita"
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tienes razon @santiaguf. En los dos casos deberia responder 200 y variar la llave gotDiscount. Lo que queria hacer era que la estudiante lideara con multiples codigos http. ¿Es muy enredado dejar que el servicio responda 200 con gotDiscount en true y false pero que de forma aleatoria tambien falle con 500?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Creo que para eso podrías usar una respuesta 404 (descuento no encontrado).
Tal cómo mencionan en esta guía, es mejor evitar los códigos 500.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc/ @mfdebian |
projects/04-burger-queen/README.md
Outdated
* Cuando un pedido finalice se debe hacer una petición HTTP a la url | ||
[https://salty-escarpment-74924.herokuapp.com/](https://salty-escarpment-74924.herokuapp.com/) | ||
que responderá de forma aleatoria si el cliente tiene el 50% de descuento | ||
en su cuenta. Para esto deberás llamar la función _getDiscount_ mostrada | ||
a continuación. Termina la implementación de la función según los comentarios | ||
que hay en ella. Te sugerimos revisar la documentacion de | ||
[HTTP Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status), | ||
[fetch](https://developer.mozilla.org/en-US/docs/Web/API/fetch) | ||
y | ||
[creación de promesas](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise). | ||
|
||
```js | ||
export const getDiscount = () => { | ||
return new Promise((resolve, reject) => { | ||
|
||
//1. Realiza una petición HTTP a la URL https://salty-escarpment-74924.herokuapp.com/ | ||
//2. Si la petición retorna código 200 entonces resuelve la promesa | ||
//3. Si la petición retorna código 404 entonces rechaza la promesa | ||
|
||
}); | ||
} | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hola @ssinuco @adolivaresl @unjust y @lupomontero !
Perdón por haber dejado pasar este PR por tanto tiempo 🙏
Estoy de acuerdo con la observación que hace Ivy, con respecto a no depender de un servicio 3erizado en Heroku o algo así, y me gusta mucho la implementación de Lupo, que devuelve un Error
en caso de que el descuento sea muy grande! Creo que por ahí debería venir esa solución.
projects/04-burger-queen/README.md
Outdated
* Agrega la opción de actualizar 2 o más pedidos que esten en la | ||
cocina. Muestra al usuario un **único** mensaje de confirmación | ||
cuando **todos** los pedidos hayan sido actualizados con éxito. | ||
Recuerda, firestore al | ||
[actualizar un documento](https://firebase.google.com/docs/firestore/manage-data/add-data#update-data) | ||
retorna una promesa. ¿Cómo podrías mostrar el mensaje de confirmación | ||
unicamente cuando todas las promesas se hayan resuelto? Te sugerimos | ||
revisar la función | ||
[Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Con respecto a esta sección tengo mis dudas... ¿Es realmente el modus operandi de un restaurant el esperar a que todo el pedido de la mesa esté listo para entregarlo a una mesa?
Entiendo el punto de que ayudaría a reforzar el OA asociado a promesas, y que suena como una buena excusa para introducir Promise.all()
pero no sé qué tan adecuado sea el ejemplo.
¿Le estoy dando mucho color? Quizás le estoy dando demasiada vuelta a algo que no lo merece, ¿Qué opinan?
En todo caso, creo que algo de eso sí ocurre, pero en mi experiencia, creo que las cosas suelen ser entregadas en dos tandas:
- Los bebestibles
- La comida
¿Quizás podemos reforzar este punto hablando un poco de eso? Es decir, esperar a que todos los bebestibles del pedido de una mesa estén listos para entregarlos, y luego lo mismo, pero con la comida? ¿O lo estoy complicando demasiado? 😁
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mfdebian de acuerdo con tu ejemplo de mundo actual, bebidas o piqueos primero, plato principal despues, pero creo por el proyecto y como los pedidos y modelo estan diseñado, seria mejor que un pedido entero es listo - es como siempre Burger Queen ha sido implementado.
Y Promise.all()
podemos usar por mesas (pedidos) multiples. Al menos empezamos aqui, y si las estudiantes quieren llevar la tema mas alla, pueden.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
listo! actualizaré el PR entonces 😊
projects/04-burger-queen/README.md
Outdated
revisar la función | ||
[Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all). | ||
* Cuando un pedido finalice se debe hacer una petición HTTP a la url | ||
[https://salty-escarpment-74924.herokuapp.com/](https://salty-escarpment-74924.herokuapp.com/) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hay que editar eso entonces y incluir el funcion que responde un status https://github.com/Laboratoria/bootcamp/pull/1158#discussion_r892966656 en otro archivo
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@unjust @mfdebian @ssinuco Sergio, te recomiendo que ese webservice del descuento lo despliegues en otro servicio gratuito como Glitch, dado que Heroku terminará su servicio gratuito en 3 semanas
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
gracias @santiaguf !! al final optaremos por dejar una función que entregue un número aleatorio de manera asíncrona en forma de promesa, para que ninguna coach tenga que estar manteniendo algún servicio con respecto a eso, muchas gracias nuevamente!
…as en proyecto burger-queen
enhancement(project): Agrega nueva seccion de reforzamiento de promes…
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Aquí propongo nuevas funcionalidades del proyecto Burger Queen para reforzar los objetivos de aprendizaje de promesas. La motivación para esto es que hay estudiantes que por tiempo deciden pasar de social network a burger queen, sin implementar el proyecto md-links. Las estudiantes que hacen esto no tienen la oportunidad de aprender a crear su propias promesas, usar Promise.all y encadanar/anidar promesas. La idea es cubrir estos conceptos con las nuevas funcionalidades de Burger Queen.